Prometheus仿真套件文档 - uav_control坐标系及安全保护
uav_control会涉及到不同坐标系,用户根据所需选择需要的坐标系,下面是各个坐标系的理论讲解,为二次开发积累知识。
右手法则:在三维坐标系中,Z轴的正轴方向是根据右手定则确定的。右手定则也决定三维空间中任一坐标轴的正旋转方向。
要标注X、Y和Z轴的正轴方向,就将右手背对着屏幕放置,拇指即指向X轴的正方向。伸出食指和中指,如下图所示,食指指向Y轴的正方向,中指所指示的方向即是Z轴的正方向。要确定轴的正旋转方向,如下图所示,用右手的大拇指指向轴的正方向,弯曲手指。那么手指所指示的方向即是轴的正旋转方向。
PX4飞控中使用 的都是NED惯性系(北东地),右手法则,依据上电点为原点,偏航角0度为x轴方向,向北方,垂直90度y轴向右也就是东方,z轴向下,向地方向,所以NED惯性系是北东地惯性系。
通过QGC地面站连接飞控,点击“Analyze Tools--MAVlink检测--LOCAL_POSITION_NED"查看当前位置xyz数值,这里xyz数值便是NED惯性系(北东地)下的xyz数值
Prometheus下控制由于使用mavros通信,而mavros下常使用的是ENU(东北天)坐标系或者body系(前左上),先讲解ENU惯性系(东北天)
ENU惯性系(东北天)是指x轴向东,y轴向北,z轴向上(天)
所以从mavros通信中会涉及到ENU惯性系(东北天)与NED惯性系(北东地)之间坐标的互相转换,当机载电脑中Prometheus获取飞控中定位数据,则是NED惯性系(北东地)转换为ENU惯性系(东北天);当机载电脑中Prometheus向飞控发送位置控制指令,则是ENU惯性系(东北天)转换为NED惯性系(北东地)
从数值上看NED惯性系(北东地)转换ENU惯性系(东北天),就是xy轴数据互换,z轴数据取反。Prometheus地面站显示xyz坐标数据便是ENU惯性系(东北天)下,对应PX4原生坐标系数据xy轴数据互换,z轴数据取反。
mavros下常使用坐标系-机体系。body系(前左上),以无人机当前位置为原点,机头向前方向为x轴,垂直机头90度向左为y轴,垂直xy平面向上为z轴
经纬高坐标系在Prometheus中是WGS84坐标系。WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统。通过遍布世界的卫星观测站观测到的坐标建立。坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.0定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系,称为1984年世界大地坐标系统。
通过指定经纬度和经纬高,来实现经纬高控制
Prometheus由V1迭代到V2,其中重要的增添之一就是安全保护,为了用户飞行安全,减少炸机几率,Prometheus V2中增加安全保护机制
从相应代码中进行讲解
消息位置:/home/amov/Prometheus/Modules/common/prometheus_msgs/msg/UAVControlState.msg
# 无人机安全保护触发标志量
bool failsafe
failsafe安全保护触发标志量,数据类型:bool布尔类型,可取值为true 和 false
默认初始化为false,安全保护未触发,无人机正常飞行
程序位置:/home/amov/Prometheus/Modules/uav_control/src/uav_controller.cpp
对应前面讲解uav_control代码框架中uav_controller在主循环里首先进行安全保护判断
通过函数check_failsafe()返回值确定无人机出现的问题
- safety_flag == -1:与PX4断开连接,直接返回
- safety_flag == 1 :超出geofence(地理围栏),原地降落
- safety_flag == 2 :检测到odom(定位数据)失效,快速降落
用户二次开发时对于预设的安全保护也可以修改,例如将降落修改为返航,如果没有这方面需求建议不要修改,避免出现意外事故
再深入了解函数check_failsafe()
可以知道每种情况是如何判断输出的
其中odom失效情况由于定位源不同,失效方式不同,专门做了安全保护判断
相应
- Odom invalid: Get Vision Pose Timeout!视觉定位超时
- Odom invalid: Velocity too large! 速度过快
- Odom invalid: vision_pose_error!视觉定位出错
- Odom invalid: GPS/RTK location error! GPS/RTK定位出错
- Odom invalid: RTK not fixed! RTK没有固定,定位错误
- Odom invalid: Get UWB Pose Timeout! UWB定位超时
- Odom invalid: Get GPS/RTK Pose Timeout! GPS/RTK定位超时
其中速度过快就是前面参数修改中maximum_safe_vel_(最大安全速度),无人机超过这个速度导致Odom invalid,safety_flag == 2触发安全保护进入降落模式
而其中Timeout超时对应预定值 位置:/home/amov/Prometheus/Modules/uav_control/include/uav_estimator.h
这些默认值是根据测试相应硬件得到的,如果说用户自定义使用其他硬件,然后运行显示超时,可以看看是传感器延时长,如果是可以适当增大这里的数值